package ProyectoX;

import java.io.BufferedReader;
import java.io.IOException;

import Casillero.Acido;
import Casillero.Asfalto;
import Casillero.Casillero;
import Casillero.Fin;
import Casillero.Tierra;
import Coleccionable.Baliza;
import Coleccionable.Coleccionable;
import Coleccionable.Cono;
import Objeto.Cofre;
import Objeto.Pared;
import Objeto.Planta;
import Premio.Energia;
import Premio.Municiones;
import Premio.Premio;
import Premio.Puntos;


public class Tablero {
	
	protected Casillero [][] casilleros;
	protected int x;
	protected int y;
	protected Fin fin;
	
	public Tablero(BufferedReader nivel){
		
		x=10;
		y=10;
		fin=new Fin();
		casilleros=new Casillero[10][10];
		
		//cargar nivel
		
		String linea;
		for(int i=0;i<10;i++)
			try {
				linea=nivel.readLine();
				for(int j=0;j<10;j++){
					switch (linea.charAt(j)){
					case 't':{
						casilleros[j][i]=new Tierra();
					}
					break;
					case 'f':{
						casilleros[j][i]=fin;
					}
					break;
					case 'a':{
						casilleros[j][i]=new Asfalto();
					}
					break;
					case 'o':{
						casilleros[j][i]=new Acido();
					}
					break;
					case 'p':{
						casilleros[j][i]=new Asfalto();
						casilleros[j][i].setObjeto(new Cofre(new Puntos()));
					}
					break;
					case 'm':{
						casilleros[j][i]=new Asfalto();
						casilleros[j][i].setObjeto(new Cofre(new Municiones()));
					}
					break;
					case 'e':{
						casilleros[j][i]=new Asfalto();
						casilleros[j][i].setObjeto(new Cofre(new Energia()));
					}
					break;
					case 'c':{
						casilleros[j][i]=new Asfalto();
						casilleros[j][i].setColeccionable(new Cono());
					}
					break;
					case 'b':{
						casilleros[j][i]=new Asfalto();
						casilleros[j][i].setColeccionable(new Baliza());
					}
					break;
					case '|':{
						casilleros[j][i]=new Tierra();
						casilleros[j][i].setObjeto(new Pared());
					}
					break;
					case 'y':{
						casilleros[j][i]=new Tierra();
						casilleros[j][i].setObjeto(new Planta());
					}
					break;
					}
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
		try {
			nivel.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	/**
	 * retorna si se puede avanzar o no al casillero que esta en la posicion [posx][posy]
	 * @param posx
	 * @param posy
	 * @return
	 */
	
	public boolean puedeAvanzar(int posx,int posy){
		if(posx>=0&&posy>=0&&posy<y&&posx<x)
			return casilleros[posx][posy].getTransitable();
		else 
			return false;
	}
	/**
	 * Retorna el casillero en las pos [x][y]
	 * @param x
	 * @param y
	 * @return
	 */
	public Casillero getCasillero(int x, int y){
		return casilleros[x][y];
	}
	/**
	 * Retorna el ancho del tablero
	 * @return
	 */
	public int getX(){
		return x;
	}
	/**
	 * retorna el alto del tablero
	 * @return
	 */
	public int getY(){
		return y;
	}
	/**
	 * Retorna verdadero si el casillero es el final
	 * @param c
	 * @return
	 */
	 
	public boolean esFinal(Casillero c){
		return fin==c;
	}
}
